package com.nexus.plugin.tenant;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.nexus.core.service.entity.TenantEntity;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

/**
 * 租户ID自动填充处理器
 * 实现新增和更新时自动设置tenant_id字段
 * @Date 2025/7/25 11:20
 * @Author luzhengning
 **/
@Component
public class TenantMetaObjectHandler implements MetaObjectHandler {

    /**
     * 从上下文获取当前租户ID（实际项目中需根据认证机制实现）
     */
    private Long getCurrentTenantId() {
        // 示例：从ThreadLocal获取当前租户ID（实际应结合Spring Security/Session等实现）
        return TenantContextHolder.getTenantId();
    }

    /**
     * 插入时自动填充租户ID
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        // 判断实体是否继承了TenantEntity
        if (metaObject.getOriginalObject() instanceof TenantEntity) {
            Long tenantId = getCurrentTenantId();
            // 只有租户ID为空时才填充（避免手动指定租户ID的场景被覆盖）
            if (tenantId != null) {
                this.strictInsertFill(metaObject, "tenantId", Long.class, tenantId);
            }
        }
    }

    /**
     * 更新时自动填充租户ID（可选：防止租户ID被篡改）
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        // 与插入逻辑一致，确保更新时租户ID不变（或根据业务需求调整）
        insertFill(metaObject);
    }
}
